package com.neuedu.corejava.ch12;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 20190814早上
 * 拷贝文件
 * @author admin
 *
 */
public class FileCopy {
	
	
	private void copy(String src,String desc){
		File f1=new File(src);
		File f2=new File(desc);
		copy(f1,f2);
	}

	//使用方法的重载对参数进行重构
	public void copy(File srcFile,File descFile){
		
		//判断源文件是否存在,如果源文件不存在，则不需要拷贝
		if(srcFile==null || !srcFile.exists()){
			System.out.println("源文件不存在");
			return;
		}
		//判断目标文件或目标目录是否存在,如果目标文件不存在，则不需要拷贝
		if(descFile==null){
			System.out.println("目标文件为null");
			return;
		}else{
			//创建目标目录
			descFile.getParentFile().mkdirs();
		}
		
		
		//输入流和输出流
		//定义
		FileInputStream fileInputStream=null;
		FileOutputStream fileOutputStream=null;
		
		
		try {
			//打开文件流
			fileInputStream=new FileInputStream(srcFile);
			//输出流
			fileOutputStream=new FileOutputStream(descFile);
			
			//构建字节数组，可以选择合适的大小
			byte[] b=new byte[128];
			//[] b=new byte[1024*1024];
			
			//读文件
			//把读到的数据保存到buffer中，并返回实际读取的内容长度，如果文件已经读取完毕，则返回-1
			int length=fileInputStream.read(b);
			
			//当length=-1时表示文件读取完毕
			while(length!=-1){
				
				//循环入数据，直到文件写完为止;注意：每次只写入读取的数据0，length
				fileOutputStream.write(b, 0, length);
				//循环读取数据，直到文件读完为止
				length=fileInputStream.read(b);
			}
			
			
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fileOutputStream!=null){
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(fileInputStream!=null){
				try {
					fileInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String src="D:\\东软培训\\资料\\连接.txt";
		String desc="D:\\东软培训\\资料\\copy\\连接1.txt";
		
		FileCopy copy=new FileCopy();
		System.out.println("拷贝文件。。。。。。");
		long start=System.currentTimeMillis();
		copy.copy(src, desc);
		long stop=System.currentTimeMillis();
		
		System.out.println("拷贝时间："+(stop-start)/1000+"秒");

	}

}
